package com.softtown.modules.organization.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.softtown.common.service.BaseService;
import com.softtown.common.utils.Result;
import com.softtown.modules.organization.dto.CompOrgDeptDTO;
import com.softtown.modules.organization.dto.CompOrgDeptTreeDTO;
import com.softtown.modules.organization.entity.CompOrgDeptEntity;
import com.softtown.modules.organization.vo.*;

import java.util.List;


/**
 * @version v1.0
 * @ProjectName: softtown-aioffice
 * @ClassName: CompOrgDeptService
 * @Description: 公司部门Service接口层
 * @Author: fuming
 * @Date: 2019/6/4 17:56
 */
public interface CompOrgDeptService extends BaseService<CompOrgDeptEntity> {

    /**
     * 根据公司所属的ID来获取相应的所有部门相关信息
     * @param companyId
     * @return java.util.List<com.softtown.modules.organization.vo.CompOrgDeptVO>
     * @Author fuming
     * @Date 2020/5/26 16:32
     */
    List<CompOrgDeptVO> getOrgListByCompId(Long companyId);

    /**
     * 根据公司所属的ID来获取相应的所有部门相关信息
     *
     * @param companyId 公司id
     * @return List<CompOrgDeptVO>
     * @author Dingyayong
     * @date 2019/6/17 17:49
     */
    List<CompOrgDeptVO> getTreeDept(Long companyId);

    /**
     * 添加预算时获取公司下的部门信息【树形图】
     *
     * @param companyId 公司id
     * @return List<CompOrgDeptVO>
     * @author Dingyayong
     * @date 2019/6/17 17:49
     */
    List<CompOrgDeptVO> getAddTreeDept(Long companyId);

    /**
     * 添加部门
     * @param compOrgDeptDTO
     * @return void
     * @Author fuming
     * @Date 2020/5/26 16:32
     */
    void addDepartment(CompOrgDeptDTO compOrgDeptDTO);

    /**
     * 部门修改
     * @param compOrgDeptDTO
     * @return void
     * @Author fuming
     * @Date 2020/5/26 16:33
     */
    Result updateDeptInfos(CompOrgDeptDTO compOrgDeptDTO);

    /**
     * 根据id 获取信息
     *
     * @param id
     * @return
     * @author Dingyayong
     * @date 2019/6/23 13:38
     */
    CompOrgDeptEntity getById(Long id);

    /**
     * 根据部门ID来查询部门的信息
     * @param id
     * @return com.softtown.modules.organization.vo.CompOrgDeptVO
     * @Author fuming
     * @Date 2020/5/26 16:33
     */
    CompOrgDeptVO getDeptInfoById(Long id);

    /**
     * 根据部门ID来删除部门
     * @param id
     * @return boolean
     * @Author fuming
     * @Date 2020/5/26 16:33
     */
    void deleteDepartment(Long id);

    /**
     * 激活部门
     *
     * @param id
     * @return boolean
     * @author Dingyayong
     * @date 2019/9/3 14:00
     */
    void activeOrgDept(Long id);

    /**
     * 禁用部门
     *
     * @param id
     * @return boolean
     * @author Dingyayong
     * @date 2019/9/3 14:00
     */
    void cancelOrgDept(Long id);

    /**
     * 通过pid 找出下级部门
     *
     * @param id
     * @return List
     * @author Dingyayong
     * @date 2019/7/30 10:10
     */
    List<CompOrgDeptEntity> getDeptByPid(Long id);

    /**
     * 通过pid 和是否为预算部门找出下级部门
     *
     * @param id
     * @return List
     * @author Dingyayong
     * @date 2019/7/30 10:10
     */
    List<CompOrgDeptEntity> getDeptByPidAndBud(Long id);

    /**
     * 设置为预算部门
     *
     * @param id
     * @return List
     * @author Dingyayong
     * @date 2019/7/30 10:10
     */
    void setBudGetDept(Long id);

    /**
     * 取消设置为预算部门
     *
     * @param id
     * @return
     * @author Dingyayong
     * @date 2019/7/30 10:10
     */
    void cancelBudGetDept(Long id);

    /**
     * 找出公司部门汇总
     * @param compId
     * @param period
     * @return java.util.List<com.softtown.modules.organization.vo.CompOrgDeptVO>
     * @Author fuming
     * @Date 2020/5/26 16:34
     */
    List<CompOrgDeptVO> getBudDeptSummary(Long compId, String period);

    /**
     * 通过公司ID来获取预算部门名称
     * @param companyId
     * @return java.util.List<com.softtown.modules.organization.vo.CompOrgDeptVO>
     * @Author fuming
     * @Date 2020/5/26 16:34
     */
    List<CompOrgDeptVO> getBudDeptNameListByCompId(Long companyId);

    /**
     * 根据公司查找部门
     *
     * @param compId 公司id
     * @return List<CompOrgDeptEntity> getListByCompId
     * @author Dingyayong
     * @date 2019-08-23 09:56
     */
    List<CompOrgDeptEntity> getListByCompId(Long compId);

    /**
     * 获取树形预算部门
     *
     * @param compId 公司id
     * @return List<CompOrgDeptVO> getBudgetDeptList
     * @author Dingyayong
     * @date 2019-08-23 11:13
     */
    List<CompOrgDeptVO> getBudgetDeptList(Long compId);

    /**
     * 获取树形预算部门
     *
     * @param compOrgDeptTreeDTO 树形预算部门DTO
     * @return List<CompOrgDeptVO> getBudgetDeptList
     * @author Dingyayong
     * @date 2019-10-14 14:09:35
     */
    List<CompOrgDeptTreeVO> getBudDeptList(CompOrgDeptTreeDTO compOrgDeptTreeDTO);

    /**
     * 通过预算期间查询预算情况
     * @param compId
     * @param periodBegin
     * @param periodEnd
     * @param expItemId
     * @param deptId
     * @return java.util.List<com.softtown.modules.organization.vo.CensusCompareBranchVO>
     * @Author fuming
     * @Date 2020/5/26 16:34
     */
    List<CensusCompareBranchVO> getCensusCompareBranch(Long compId, String periodBegin, String periodEnd, Long expItemId, Long deptId);

    /**
     * 通过预算期间查询实际情况【审批通过】
     * @param compId
     * @param deptId
     * @param expItemId
     * @param periodBegin
     * @param periodEnd
     * @return java.util.List<com.softtown.modules.organization.vo.CensusCompareBranchActualVO>
     * @Author fuming
     * @Date 2020/5/26 16:35
     */
    List<CensusCompareBranchActualVO> getCensusCompareBranchByActual(Long compId, Long deptId, Long expItemId, String periodBegin, String periodEnd);

    /**
     * 通过预算期间查询实际情况【费用已记账】
     * @param compId
     * @param deptId
     * @param expItemId
     * @param periodBegin
     * @param periodEnd
     * @return java.util.List<com.softtown.modules.organization.vo.CensusCompareBranchActualVO>
     * @Author fuming
     * @Date 2020/5/26 16:35
     */
    List<CensusCompareBranchActualVO> getCensusCompareBranchByActualAndPost(Long compId, Long deptId, Long expItemId, String periodBegin, String periodEnd);

    /**
     * 通过预算期间查询实际情况【已支付】
     * @param compId
     * @param deptId
     * @param expItemId
     * @param periodBegin
     * @param periodEnd
     * @return java.util.List<com.softtown.modules.organization.vo.CensusCompareBranchActualVO>
     * @Author fuming
     * @Date 2020/5/26 16:35
     */
    List<CensusCompareBranchActualVO> getCensusCompareBranchByActualAndPayStatus(Long compId, Long deptId, Long expItemId, String periodBegin, String periodEnd);

    /**
     * 查找部门信息
     *
     * @param sysEnterpriseOrgChildQueryWrapper 部门类
     * @return java.util.List<com.softtown.modules.organization.entity.CompOrgDeptEntity>
     * @Author fuming
     * @Date 2020/4/13 20:56
     */
    List<CompOrgDeptEntity> selectList(QueryWrapper<CompOrgDeptEntity> sysEnterpriseOrgChildQueryWrapper);

    /**
     * 获取上级部门(直至pid为0)
     *
     * @param id 当前部门id
     * @return java.util.List<com.softtown.modules.organization.entity.CompOrgDeptEntity>
     * @Author fuming
     * @Date 2020/1/21 10:53
     */
    List<String> getOrgFatherDepts(Long id);

    /**
     * 获取上级部门
     *
     * @param id
     * @return
     */
    String getDeptPidName(Long id);

    CompDeptBudVO getPbudDept(Long id,Long compId);

    CompDeptAllPidVO getAllFather(Long id);
}
